// 参数1 url  请求的url地址
// 参数2 type 请求方式 默认值是 get
// 参数3 data 请求时携带的参数 默认值是 '' 
// 参数4 callback 回调函数 默认值是 空函数 
//                ajax请求结束并且请求成功 对 响应体数据执行的函数程序
function myAjax(url , type = 'get' , data = '' , callback = function () { }) {
    // 1, 创建 ajax 对象
    // 兼容 第版本IE浏览器
    let xhr;
    if (XMLHttpRequest) {
        // 标准浏览器
        xhr = new XMLHttpRequest();
    } else {
        // 低版本IE浏览器
        xhr = new ActiveXObject('Microsoft.XMLHTTP');
    }

    // 2, 设定 open()
    // 如果是 get 方式 url地址后要携带参数
    if (type === 'get') {
        // 设定open()请求方式是get 同时携带参数
        xhr.open('get', `${url}?${data}`);
    }else if( type === 'post' ){
        // post方式 直接设定 URL请求地址
        xhr.open('post' , url);

    }
    

    // 3, 如果是 post方式 设定请求头
    if (type === 'post') {
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    }

    // 4, 设定 send()
    // 如果是post方式 send() 中设定 携带参数
    if (type === 'post') {
        xhr.send(data);
    } else if (type === 'get') {
        xhr.send();
    }

    // 5, 获取 响应体结果
    // 为了兼容第版本IE浏览器
    // ajax请求状态改变是触发函数程序
    xhr.onreadystatechange = function () {
        // if( xhr.readyState == 4 && ( xhr.status >= 200 && xhr.status <= 299) ){}

        // ajax状态码是 4  http状态码是200-299 
        // 表示 ajax请求结束 并且 请求成功
        if (xhr.readyState == 4 && /^2\d{2}$/.test(xhr.status)) {
            callback(xhr.response);
        }
    }
}


// 分装一个使用promise调用的 jQuery,ajax的函数
function myPromiseAjax(url , type = 'get' , data = '' , dataType = 'text' ,){
    const p = new Promise(function( resolve,reject ){
        // 调用 jQuery封装的ajax
        $.ajax({
            url:url,
            type:type,
            data:data,
            dataType:dataType,
            success:function(res){
                resolve(res)
            },
            error:function(res){
                reject(res)
            }
        })
    })

    return p ; 
}